package ec.edu.ups.cidi.siia.plamdep.modelo.reporte;

import java.util.ArrayList;
import java.util.List;

import ec.edu.ups.cidi.siia.plamdep.modelo.algortimos.ResultAnalisisFinal;
import ec.edu.ups.cidi.siia.plamdep.modelo.algortimos.SolicitudAnalisisJMS;
import ec.edu.ups.cidi.siia.plamdep.utils.Fechas;
import ec.edu.ups.cidi.siia.plamdep.utils.Log;

/**
 * Clase que crea los daos del reporte desde los resultados de la comparacion
 * @author user
 *
 */
public class ReporteData 
{
	
	private ReporteCabecera cabecera=new ReporteCabecera();
	private List<ReporteDetalle>detallesComparador=new ArrayList<ReporteDetalle>();
	private List<ReporteDetalle>detallesExtractor=new ArrayList<ReporteDetalle>();


	public ReporteData(SolicitudAnalisisJMS sol, List<ResultAnalisisFinal> resultadosComparador,List<ResultAnalisisFinal> resultadosExtractor)
	{
		if(sol==null ){ Log.log(Log.MOD_EJECUTOR,ReporteData.class, "Error al crear datos de reporte, solcitud null"); return;}
		if(resultadosComparador==null ){ Log.log(Log.MOD_EJECUTOR,ReporteData.class, "Error al crear datos de reporte, solcitud null"); return;}
        cabecera.setAlgoritmoComparacion(sol.getCodigoAlgoritmoComparacion());
        cabecera.setAlgoritmoExtracion(sol.getCodigoAlgoritmoExtraccion());
        cabecera.setCodigoAnalisis(sol.getCodSolicitud());
        cabecera.setCorreo(sol.getMailUsuario());
        cabecera.setFechaAnalisis(new Fechas().fechaActual);
        cabecera.setHoraAnalisis(new Fechas().horaActual);
        cabecera.setFechaSolicitud(sol.getFecha());
        cabecera.setHoraSolicitud(sol.getHora());
        String [] doc=sol.getRutaArchivoSospechoso().split("\\|/");
        cabecera.setDocumento(doc[doc.length-1]);
        
        //calcular promedio de plagio
        double acu=0;
        int cont=0;
        for(ResultAnalisisFinal result:resultadosComparador)
        {
        	if(result.getPlagioDocPorcentaje()>0) //filtra solo los que se detecto plagio
        	{	
        		acu=acu+result.getPlagioDocPorcentaje();
        		cont++;
		        ReporteDetalle det=new ReporteDetalle();
		        det.setFuente(result.getFuente().getRutaOrigen());
		        det.setTipoFuente(result.getFuente().getTipo());
		        det.setPorcentajePlagio(result.getPlagioDocPorcentaje()+"");
		        detallesComparador.add(det);
        	}
        }
        cabecera.setTotalPlagio(acu/cont);
        

        if(resultadosExtractor==null ){ Log.log(Log.MOD_EJECUTOR,ReporteData.class, "Error al crear datos de reporte, solcitud null"); return;}
        for(ResultAnalisisFinal result:resultadosExtractor)
        {
        	if(result.getFuente().getTipo().equalsIgnoreCase("web"))
        	{
        	    ReporteDetalle det=new ReporteDetalle();
		        det.setFuente(result.getFuente().getRutaOrigen());
		        det.setTipoFuente(result.getFuente().getTipo());
		        det.setPorcentajePlagio(result.getPlagioDocPorcentaje()+"");
		        det.setFrecuenciaAparicion(""+result.getFuente().getFrecuenciaAparicion());
		        detallesExtractor.add(det);
        	}
        }
        
        
	}

	public ReporteCabecera getCabecera() {
		return cabecera;
	}

	public void setCabecera(ReporteCabecera cabecera) {
		this.cabecera = cabecera;
	}

	public List<ReporteDetalle> getDetallesComparador() {
		return detallesComparador;
	}

	public void setDetallesComparador(List<ReporteDetalle> detalles) {
		this.detallesComparador = detalles;
	}

	public List<ReporteDetalle> getDetallesExtractor() {
		return detallesExtractor;
	}

	public void setDetallesExtractor(List<ReporteDetalle> detallesExtractor) {
		this.detallesExtractor = detallesExtractor;
	}
	
	
	

}
